#include <opencv2/opencv.hpp>  
#include <iostream> 
#include "mosaic.h" 

  
using namespace std;  
using namespace cv;  
  
bool Mosaic() {  
    // 加载人脸检测分类器  
    CascadeClassifier face_cascade;  
    if (!face_cascade.load("/home/zcy/2024shixi/opencv-4.x/data/haarcascades/haarcascade_frontalface_default.xml")) {  
        cerr << "Error loading face cascade file" << endl;  
        return false;  
    }  
  
    // 打开默认摄像头  
    VideoCapture capture(0);  
    if (!capture.isOpened()) {  
        cerr << "Error opening video capture" << endl;  
        return false;  
    }  
  
    // ... (其余代码保持不变)  
    Mat frame, gray;  
  
    while (true) {  
        // 捕获一帧  
        capture >> frame;  
  
        // 如果无法捕获，则跳出循环  
        if (frame.empty()) {  
            cout << "No captured frame -- Break!" << endl;  
            break;  
        }  
  
        // 转换为灰度图  
        cvtColor(frame, gray, COLOR_BGR2GRAY);  
  
        // 检测人脸  
        vector<Rect> faces;  
        face_cascade.detectMultiScale(gray, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));  
  
        // 对检测到的人脸进行马赛克处理  
        for (size_t i = 0; i < faces.size(); i++) {  
            // 绘制人脸矩形框（可选，仅用于可视化）  
            rectangle(frame, faces[i], Scalar(255, 0, 0), 1, 8, 0);  
  
            // 应用马赛克效果  
            for (int x = faces[i].x; x < faces[i].x + faces[i].width; x += 20) {  
                for (int y = faces[i].y; y < faces[i].y + faces[i].height; y += 20) {  
                    // 使用黑色矩形块模拟马赛克  
                    rectangle(frame, Point(x, y), Point(x + 10, y + 10), Scalar(0, 0, 0), -1);  
                }  
            }  
        }  
  
        // 显示结果  
        imshow("Face Detection and Mosaic", frame);  
  
        // 按'q'键退出  
        char c = (char)waitKey(10);  
        if (c == 'q' || c == 27) { // 27 is ESC  
            break;  
        }  
    }  
    // 释放资源  
    capture.release();  
    destroyAllWindows();  
    return true; // 如果成功执行到这里，则返回 true  
}  
  